home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2002 November / SGI Freeware 2002 November - Disc 2.iso / dist / fw_glimpse.idb / usr / freeware / src / glimpse-3.0 / libtemplate / template / lsm2soif.c.z / lsm2soif.c
C/C++ Source or Header  |  1997-09-09  |  6KB  |  192 lines

  1. static char rcsid[] = "$Id: lsm2soif.c,v 1.10 1995/01/10 16:30:34 hardy Exp $";
  2. /*
  3.  *  lsm2soif - Converts Linux Software Maps (lsm) to SOIF.
  4.  *
  5.  *  Usage: lsm2soif url local-file
  6.  *
  7.  *  Darren Hardy, hardy@cs.colorado.edu, June 1994
  8.  *
  9.  *  ----------------------------------------------------------------------
  10.  *  Copyright (c) 1994, 1995.  All rights reserved.
  11.  *  
  12.  *          Mic Bowman of Transarc Corporation.
  13.  *          Peter Danzig of the University of Southern California.
  14.  *          Darren R. Hardy of the University of Colorado at Boulder.
  15.  *          Udi Manber of the University of Arizona.
  16.  *          Michael F. Schwartz of the University of Colorado at Boulder. 
  17.  *  
  18.  *  This copyright notice applies to all code in Harvest other than
  19.  *  subsystems developed elsewhere, which contain other copyright notices
  20.  *  in their source text.
  21.  *  
  22.  *  The Harvest software was developed by the Internet Research Task
  23.  *  Force Research Group on Resource Discovery (IRTF-RD).  The Harvest
  24.  *  software may be used for academic, research, government, and internal
  25.  *  business purposes without charge.  If you wish to sell or distribute
  26.  *  the Harvest software to commercial clients or partners, you must
  27.  *  license the software.  See
  28.  *  http://harvest.cs.colorado.edu/harvest/copyright,licensing.html#licensing.
  29.  *  
  30.  *  The Harvest software is provided ``as is'', without express or
  31.  *  implied warranty, and with no support nor obligation to assist in its
  32.  *  use, correction, modification or enhancement.  We assume no liability
  33.  *  with respect to the infringement of copyrights, trade secrets, or any
  34.  *  patents, and are not responsible for consequential damages.  Proper
  35.  *  use of the Harvest software is entirely the responsibility of the user.
  36.  *  
  37.  *  For those who are using Harvest for non-commercial purposes, you may
  38.  *  make derivative works, subject to the following constraints:
  39.  *  
  40.  *  - You must include the above copyright notice and these accompanying 
  41.  *    paragraphs in all forms of derivative works, and any documentation 
  42.  *    and other materials related to such distribution and use acknowledge 
  43.  *    that the software was developed at the above institutions.
  44.  *  
  45.  *  - You must notify IRTF-RD regarding your distribution of the 
  46.  *    derivative work.
  47.  *  
  48.  *  - You must clearly notify users that your are distributing a modified 
  49.  *    version and not the original Harvest software.
  50.  *  
  51.  *  - Any derivative product is also subject to the restrictions of the 
  52.  *    copyright, including distribution and use limitations.
  53.  */
  54. #include <stdio.h>
  55. #include <string.h>
  56. #include "util.h"
  57. #include "url.h"
  58. #include "template.h"
  59.  
  60. /* Local functions */
  61. static void do_lsmtosoif();
  62.  
  63. /* Local variables */
  64. static int n_flag = 0;
  65.  
  66. static void usage()
  67. {
  68.     fprintf(stderr, "Usage: lsm2soif url local-file\n");
  69.     exit(1);
  70. }
  71.  
  72. static void do_lsmtosoif(url, filename)
  73. char *url;
  74. char *filename;
  75. {
  76.     char buf[BUFSIZ], attr[BUFSIZ], value[BUFSIZ];
  77.     char *sv, *pv, *fv, *s, *p;
  78.     int i;
  79.     Template *t;
  80.     FILE *fp;
  81.     URL *up;
  82.     AVPair *site_avp, *path_avp, *file_avp;
  83.  
  84.     if ((up = url_open(url)) == NULL) {
  85.         errorlog("Cannot open URL: %s\n", url);
  86.         return;
  87.     }
  88.  
  89.     /* Build the template */
  90.     t = create_template(NULL, up->url);
  91.  
  92.     /* Read the file and build a SOIF template from it */
  93.     if ((fp = fopen(filename, "r")) == NULL) {
  94.         log_errno(filename);
  95.         url_close(up);
  96.         return;
  97.     }
  98.     while (fgets(buf, BUFSIZ, fp)) {
  99.         if ((s = strrchr(buf, '\n')) != NULL)
  100.             *s = '\0';
  101.         if ((s = strchr(buf, '=')) == NULL)
  102.             continue;    /* not an LSM line */
  103.         for (p = buf, i = 0; p < s && !isspace(*p); p++, i++)
  104.             attr[i] = *p;
  105.         attr[i] = '\0';
  106.         if (i < 1)
  107.             continue;    /* null attribute */
  108.         if (isdigit(attr[--i]))
  109.             attr[i] = '\0';    /* strip attribute number */
  110.  
  111.         /* Make Desc lines Description lines */
  112.         if (!strcmp(attr, "Desc")) {
  113.             strcpy(attr, "Description");
  114.         }
  115.  
  116.         while (*s != '\0' && (*s == '=' || isspace(*s)))
  117.             s++;
  118.         if (!strcmp(attr, "Site") ||
  119.             !strcmp(attr, "Path") ||
  120.             !strcmp(attr, "File")) {
  121.             if ((p = strchr(s, ' ')) != NULL) 
  122.                 *p = '\0';
  123.             if ((p = strchr(s, '\t')) != NULL) 
  124.                 *p = '\0';
  125.         }
  126.         if (strlen(s) < 1)    /* empty line */
  127.             continue;
  128.         strcpy(value, s);
  129.         if (t->list)
  130.             append_AVList(t->list, attr, value, strlen(value));
  131.         else
  132.             t->list = create_AVList(attr, value, strlen(value));
  133.         
  134.     }
  135.     fclose(fp);
  136.     
  137.     /* Reset t->url to the file that the LSM points to, if possible */
  138.     site_avp = extract_AVPair(t->list, "Site");
  139.     path_avp = extract_AVPair(t->list, "Path");
  140.     file_avp = extract_AVPair(t->list, "File");
  141.     if (site_avp && path_avp && file_avp) {
  142.         sv = strdup(site_avp->value);
  143.         pv = strdup(path_avp->value);
  144.         fv = strdup(file_avp->value);
  145.         for (p = sv; *p && !isspace(*p); p++);
  146.         *p = '\0';
  147.         for (p = pv; *p && !isspace(*p); p++);
  148.         *p = '\0';
  149.         for (p = fv; *p && !isspace(*p); p++);
  150.         *p = '\0';
  151.         if (*pv == '/' && *fv == '/')
  152.             sprintf(buf, "ftp://%s%s%s", sv, pv, fv);
  153.         else if (*pv == '/' && *fv != '/')
  154.             sprintf(buf, "ftp://%s%s/%s", sv, pv, fv);
  155.         else if (*pv != '/' && *fv == '/')
  156.             sprintf(buf, "ftp://%s/%s%s", sv, pv, fv);
  157.         else
  158.             sprintf(buf, "ftp://%s/%s/%s", sv, pv, fv);
  159.         xfree(t->url);
  160.         t->url = strdup(buf);
  161.         xfree(sv);
  162.         xfree(pv);
  163.         xfree(fv);
  164.     }
  165.  
  166.     /* Print out the template */
  167.     (void) init_print_template(stdout);
  168.     print_template(t);
  169.     finish_print_template();
  170.     free_template(t);
  171.     url_close(up);
  172.     return;
  173. }
  174.  
  175. int main(argc, argv)
  176. int argc;
  177. char *argv[];
  178. {
  179.     char *url, *filename;
  180.  
  181.     if (argc != 3)
  182.         usage();
  183.     url = strdup(argv[1]);
  184.     filename = strdup(argv[2]);
  185.  
  186.     init_log(stderr, stderr);
  187.     init_url();
  188.     do_lsmtosoif(url, filename);
  189.     finish_url();
  190.     exit(0);
  191. }
  192.